num.predictors <- 4
# analysis and pooling
implist <- mitml::as.mitml.list(split(imps, imps$imputation))
analysis <- with(implist, lm(mathpost ~ anxiety.cgm + anxiety.squared + mathpre + male))
# significance tests with barnard & rubin degrees of freedom
mitml::testEstimates(analysis, extra.pars = T, df.com = (N-num.predictors-1))
# wald test that all slopes = 0
nullanalysis <- with(implist, lm(mathpost ~ 1))
mitml::testModels(analysis, nullanalysis, df.com = (N-num.predictors-1), method = "D1")
# likelihood ratio test that all slopes = 0
mitml::testModels(analysis, nullanalysis, method = "D3")
# example x: analyze two-level multiple imputations
# requires fdir, lme4, and mitml packages
##################################################
# read imputed data
##################################################
# set working directory
fdir::set()
# read imputed data from working directory
imps <- read.table("imps.dat")
# set working directory
fdir::set()
# read imputed data from working directory
imps <- read.table("/imps/imps.dat")
# set working directory
fdir::set()
# read imputed data from working directory
imps <- read.table("/imps/imps.dat")
# set working directory
fdir::set()
# read imputed data from working directory
imps <- read.table("./imps/imps.dat")
names(imps) <- c("imputation","school","student","condition","teachexp","eslpct","ethnic","male","frlunch",
"achievegrp","stanmath","efficacy1","efficacy2","probsolve1","probsolve2")
# center covariates at their grand means
imps$probsolve1.cgm <- imps$probsolve1 - mean(imps$probsolve1)
imps$male.cgm <- imps$male - mean(imps$male)
imps$frlunch.cgm <- imps$frlunch - mean(imps$frlunch)
imps$teachexp.cgm <- imps$teachexp - mean(imps$teachexp)
# wald test that all slopes = 0
nullanalysis <- with(implist, lm(probsolve2 ~ 1 + (1 | school)))
# analysis and pooling
implist <- mitml::as.mitml.list(split(imps, imps$imputation))
model <- "probsolve2 ~ probsolve1.cgm + male.cgm frlunch.cgm + teachexp.cgm + condition + (1 | school)"
analysis <- with(implist, lme4::lmer(model, REML = T))
model <- "probsolve2 ~ probsolve1.cgm + male.cgm + frlunch.cgm + teachexp.cgm + condition + (1 | school)"
analysis <- with(implist, lme4::lmer(model, REML = T))
estimates <- mitml::testEstimates(analysis, extra.pars = T)
estimates
confint(estimates, level = .95)
nullanalysis <- with(implist, lm(probsolve2 ~ 1 + (1 | school)))
mitml::testModels(analysis, nullanalysis, method = "D1")
# wald test that all slopes = 0
nullanalysis <- with(implist, lme4::lmer(probsolve2 ~ 1 + (1 | school)))
mitml::testModels(analysis, nullanalysis, method = "D1")
# likelihood ratio test that all slopes = 0
mitml::testModels(analysis, nullanalysis, method = "D3")
# example x: analyze two-level random intercept multiple imputations
library(fdir)
library(lme4)
library(mitml)
##################################################
# read imputed data
##################################################
# set working directory
set()
# read imputed data from working directory
imps <- read.table("./imps/imps.dat")
names(imps) <- c("imputation","school","student","condition","teachexp","eslpct","ethnic","male","frlunch",
"lowach","stanmath","efficacy1","efficacy2","psolvepre","psolvepst")
# center covariates at their grand means
imps$psolvepre.cgm <- imps$psolvepre - mean(imps$psolvepre)
imps$male.cgm <- imps$male - mean(imps$male)
imps$frlunch.cgm <- imps$frlunch - mean(imps$frlunch)
imps$teachexp.cgm <- imps$teachexp - mean(imps$teachexp)
##################################################
# analysis and pooling
##################################################
# analysis and pooling
implist <- as.mitml.list(split(imps, imps$imputation))
model <- "psolvepst ~ psolvepre.cgm + male.cgm + frlunch.cgm + teachexp.cgm + condition + (1 | school)"
analysis <- with(implist, lmer(model, REML = T))
# significance tests
estimates <- testEstimates(analysis, extra.pars = T)
estimates
confint(estimates)
##################################################
# wald and likelihood ratio (omnibus) tests
##################################################
# wald test that all slopes = 0
nullanalysis <- with(implist, lmer(psolvepst ~ 1 + (1 | school)))
testModels(analysis, nullanalysis, method = "D1")
# analysis and pooling
implist <- as.mitml.list(split(imps, imps$imputation))
# example x: analyze two-level random intercept multiple imputations
library(fdir)
library(lme4)
library(mitml)
##################################################
# read imputed data
##################################################
# set working directory
set()
# read imputed data from working directory
imps <- read.table("./imps/imps.dat")
names(imps) <- c("imputation","school","student","condition","teachexp","eslpct","ethnic","male","frlunch",
"lowach","stanmath","efficacypre","efficacypst","psolvepre","psolvepst")
# center covariates at their grand means
imps$psolvepre.cgm <- imps$psolvepre - mean(imps$psolvepre)
imps$male.cgm <- imps$male - mean(imps$male)
imps$frlunch.cgm <- imps$frlunch - mean(imps$frlunch)
imps$teachexp.cgm <- imps$teachexp - mean(imps$teachexp)
##################################################
# analysis and pooling
##################################################
# analysis and pooling
implist <- as.mitml.list(split(imps, imps$imputation))
fit <- with(implist, lmer(psolvepst ~ psolvepre.cgm + male.cgm + frlunch.cgm + teachexp.cgm + condition + (1 | school), REML = T))
# significance tests
estimates <- testEstimates(fit, extra.pars = T)
estimates
confint(estimates)
# Two-Level Regression With Random Intercepts
library(fdir)
library(lme4)
library(mitml)
##################################################
# read imputed data
##################################################
# set working directory
set()
# read imputed data from working directory
imps <- read.table("./imps/imps.dat")
names(imps) <- c("imputation","school","student","condition","teachexp","eslpct","ethnic","male","frlunch",
"lowach","stanmath","efficacypre","efficacypst","psolvepre","psolvepst")
# center covariates at their grand means
imps$psolvepre.cgm <- imps$psolvepre - mean(imps$psolvepre)
imps$male.cgm <- imps$male - mean(imps$male)
imps$frlunch.cgm <- imps$frlunch - mean(imps$frlunch)
imps$teachexp.cgm <- imps$teachexp - mean(imps$teachexp)
##################################################
# analysis and pooling
##################################################
# analysis and pooling
implist <- as.mitml.list(split(imps, imps$imputation))
fit <- with(implist, lmer(psolvepst ~ psolvepre.cgm + male.cgm + frlunch.cgm + teachexp.cgm + condition + (1 | school), REML = T))
# significance tests
estimates <- testEstimates(fit, extra.pars = T)
estimates
confint(estimates) # confidence intervals
##################################################
# wald and likelihood ratio (omnibus) tests
##################################################
# wald test that all slopes = 0
nullanalysis <- with(implist, lmer(psolvepst ~ 1 + (1 | school)))
testModels(analysis, nullanalysis, method = "D1")
# Two-Level Regression With Random Intercepts
library(fdir)
library(lme4)
library(mitml)
##################################################
# read imputed data
##################################################
# set working directory
set()
# read imputed data from working directory
imps <- read.table("./imps/imps.dat")
names(imps) <- c("imputation","school","student","condition","teachexp","eslpct","ethnic","male","frlunch",
"lowach","stanmath","efficacypre","efficacypst","psolvepre","psolvepst")
# center covariates at their grand means
imps$psolvepre.cgm <- imps$psolvepre - mean(imps$psolvepre)
imps$male.cgm <- imps$male - mean(imps$male)
imps$frlunch.cgm <- imps$frlunch - mean(imps$frlunch)
imps$teachexp.cgm <- imps$teachexp - mean(imps$teachexp)
##################################################
# analysis and pooling
##################################################
# analysis and pooling
implist <- as.mitml.list(split(imps, imps$imputation))
fit <- with(implist, lmer(psolvepst ~ psolvepre.cgm + male.cgm + frlunch.cgm + teachexp.cgm + condition + (1 | school), REML = T))
# significance tests
estimates <- testEstimates(fit, extra.pars = T)
estimates
confint(estimates) # confidence intervals
##################################################
# wald and likelihood ratio (omnibus) tests
##################################################
# wald test that all slopes = 0
nullanalysis <- with(implist, lmer(psolvepst ~ 1 + (1 | school)))
testModels(fit, nullanalysis, method = "D1")
# Two-Level Regression With Random Intercepts
library(fdir)
library(lme4)
library(mitml)
##################################################
# read imputed data
##################################################
# set working directory
set()
# read fcs imputed data from working directory
imps <- read.table("./imps/fcs.dat")
set()
# read fcs imputed data from working directory
imps <- read.table("./imps/fcsimps.dat")
names(imps) <- c("imputation","school","student","condition","teachexp","eslpct","hispanic","male","frlunch",
"lowach","stanmath","efficacypre","efficacypst","psolvepre","psolvepst")
# within-cluster (group mean) center sleep quality and add cluster-specific group means to the data
imps <- rockchalk::gmc(imps, c("psolvepre","hispanic","frlunch"), by = c("school"), FUN = mean, suffix = c(".meanj", ".cwc"), fulldataframe = TRUE)
imps$psolvepre.meanj.cgm <- imps$psolvepre.meanj - mean(imps$psolvepre.meanj)
imps$hispanic.meanj.cgm <- imps$hispanic.meanj - mean(imps$hispanic.meanj)
imps$frlunch.meanj.cgm <- imps$frlunch.meanj - mean(imps$frlunch.meanj)
implist <- as.mitml.list(split(imps, imps$imputation))
fit <- with(implist, lmer(psolvepst ~ psolvepre.cwc + hispanic.cwc + frlunch.cwc + psolvepre.meanj.cgm + hispanic.meanj.cgm + frlunch.meanj.cgm + condition + (1 | school), REML = T))
# significance tests
estimates <- testEstimates(fit, extra.pars = T)
estimates
confint(estimates) # confidence intervals
# Two-Level Regression With Random Intercepts
library(fdir)
library(lme4)
library(mitml)
##################################################
# read imputed data
##################################################
# set working directory
set()
# read imputed data from working directory
imps <- read.table("./imps/imps.dat")
names(imps) <- c("imputation","school","student","condition","teachexp","eslpct","hispanic","male","frlunch",
"lowach","stanmath","efficacypre","efficacypst","psolvepre","psolvepst")
# within-cluster (group mean) center level-1 predictors and add cluster-specific group means to the data
imps <- rockchalk::gmc(imps, c("psolvepre","hispanic","frlunch"), by = c("school"), FUN = mean, suffix = c(".meanj", ".cwc"), fulldataframe = TRUE)
# center covariates at their grand means
imps$psolvepre.meanj.cgm <- imps$psolvepre.meanj - mean(imps$psolvepre.meanj)
imps$hispanic.meanj.cgm <- imps$hispanic.meanj - mean(imps$hispanic.meanj)
imps$frlunch.meanj.cgm <- imps$frlunch.meanj - mean(imps$frlunch.meanj)
##################################################
# analysis and pooling
##################################################
# analysis and pooling
implist <- as.mitml.list(split(imps, imps$imputation))
fit <- with(implist, lmer(psolvepst ~ psolvepre.cwc + hispanic.cwc + frlunch.cwc + psolvepre.meanj.cgm + hispanic.meanj.cgm + frlunch.meanj.cgm + condition + (1 | school), REML = T))
# significance tests
estimates <- testEstimates(fit, extra.pars = T)
estimates
confint(estimates) # confidence intervals
##################################################
# wald and likelihood ratio (omnibus) tests
##################################################
# wald test that all slopes = 0
nullanalysis <- with(implist, lmer(psolvepst ~ 1 + (1 | school)))
testModels(fit, nullanalysis, method = "D1")
# Two-Level Regression With Random Intercepts
library(fdir)
library(lme4)
library(mitml)
##################################################
# read imputed data
##################################################
# set working directory
set()
# read imputed data from working directory
imps <- read.table("./imps/imps.dat")
names(imps) <- c("imputation","school","student","condition","teachexp","eslpct","hispanic","male","frlunch",
"lowach","stanmath","efficacypre","efficacypst","psolvepre","psolvepst")
# within-cluster (group mean) center level-1 predictors and add cluster-specific group means to the data
imps <- rockchalk::gmc(imps, c("psolvepre","hispanic","frlunch"), by = c("school"), FUN = mean, suffix = c(".meanj", ".cwc"), fulldataframe = TRUE)
# center covariates at their grand means
imps$psolvepre.meanj.cgm <- imps$psolvepre.meanj - mean(imps$psolvepre.meanj)
imps$hispanic.meanj.cgm <- imps$hispanic.meanj - mean(imps$hispanic.meanj)
imps$frlunch.meanj.cgm <- imps$frlunch.meanj - mean(imps$frlunch.meanj)
##################################################
# analysis and pooling
##################################################
# analysis and pooling
implist <- as.mitml.list(split(imps, imps$imputation))
fit <- with(implist, lmer(psolvepst ~ psolvepre.cwc + hispanic.cwc + frlunch.cwc + psolvepre.meanj.cgm + hispanic.meanj.cgm + frlunch.meanj.cgm + condition + (1 | school), REML = T))
# significance tests
estimates <- testEstimates(fit, extra.pars = T)
estimates
confint(estimates) # confidence intervals
##################################################
# wald and likelihood ratio (omnibus) tests
##################################################
# wald test that all slopes = 0
nullanalysis <- with(implist, lmer(psolvepst ~ 1 + (1 | school)))
testModels(fit, nullanalysis, method = "D1")
# Two-Level Moderated Regression With Random Slopes
library(fdir)
library(mitml)
library(lme4)
##################################################
# read imputed data
##################################################
# set working directory
set()
# read imputed data from working directory
imps <- read.table("./imps/imps.dat")
names(imps) <- c("imputation","school","student","wave","condition","teachexp","eslpct","hispanic",
"male","frlunch","lowach","stanmath","month", "month7", "probsolve", "efficacy")
# center covariates at their grand means
imps$frlunch.cgm <- imps$frlunch - mean(imps$frlunch)
# compute product term
imps$monthbyc <- imps$month * imps$condition
imps$monthbyh <- imps$month * imps$hispanic
##################################################
# analysis and pooling
##################################################
# analysis and pooling
implist <- as.mitml.list(split(imps, imps$imputation))
fit <- with(implist, lmer(probsolve ~ month + frlunch.cgm + hispanic + condition + monthbyc + monthbyh + (1 + month | student), REML = T))
# significance tests
estimates <- testEstimates(fit, extra.pars = T)
estimates
confint(estimates) # confidence intervals
# test conditional effect (simple slope) at condition = 0
# slp_cond0 <- "month + monthbyc*0"
testConstraints(fit, constraints = "month + monthbyc*0")
# test conditional effect (simple slope) at condition = 1
# slp_cond1 <- "month + monthbyc*1"
testConstraints(fit, constraints = "month + monthbyc*1")
# test conditional effect (simple slope) at hispanic = 0
# slp_hisp0 <- "month + monthbyh*0"
testConstraints(fit, constraints = "month + monthbyh*0")
# test conditional effect (simple slope) at hispanic = 1
# slp_hisp1 <- "month + monthbyh*1"
testConstraints(fit, constraints = "month + monthbyh*1")
# Bayes Moderated Regression
library(fdir)
library(mitml)
##################################################
# read imputed data
##################################################
# set working directory
set()
# read imputed data from working directory
imps <- read.table("./imps/imps.dat")
names(imps) <- c("imputation", "id","male","hispanic","riskgrp","atrisk","behsymp1","lrnprob1",
"read1","read2","read3","read9","read9grp","stanread7",
"math1","math2","math3","math9","math9grp","stanmath7")
# center lower-order variables and compute the product
imps$read1.cgm <- imps$read1 - mean(imps$read1)
imps$lrnprob1.cgm <- imps$lrnprob1 - mean(imps$lrnprob1)
imps$atrisk.cgm <- imps$atrisk - mean(imps$atrisk)
imps$product <- imps$read1.cgm * imps$lrnprob1.cgm
##################################################
# analysis and pooling
##################################################
# analysis and pooling
implist <- as.mitml.list(split(imps, imps$imputation))
fit <- with(implist, lm(read9 ~ read1.cgm + lrnprob1.cgm + product + atrisk.cgm))
# significance tests with barnard & rubin degrees of freedom
estimates <- testEstimates(fit, extra.pars = T, df.com = 133)
estimates
confint(estimates) # confidence intervals
# pooled r-square
rsquare <- mean(unlist(lapply(implist, (function(x) summary(lm(read9 ~ read1.cgm + lrnprob1.cgm + product + atrisk.cgm, data = x))$r.squared))))
rsquare
##################################################
# test conditional effects (simple slopes)
##################################################
# pooled standard deviation of the moderator
lrnprob1.sd <- mean(unlist(lapply(implist, (function(x) sd(x$lrnprob1.cgm)))))
lrnprob1.sd
# test conditional effect (simple slope) at +1 SD above the mean
slp_high <- "read1.cgm + product*1*10.77"
testConstraints(fit, constraints = slp_high, df.com = 133)
# test conditional effect (simple slope) at the mean
slp_mean <- "read1.cgm + product*0*10.77"
testConstraints(fit, constraints = slp_mean, df.com = 133)
# test conditional effect (simple slope) at -1 SD below the mean
slp_low <- "read1.cgm + product*-1*10.77"
testConstraints(fit, constraints = slp_low, df.com = 133)
# MCMC Moderated Regression
library(fdir)
library(rblimp)
library(mitml)
##################################################
# read data
##################################################
# set working directory
set()
# read imputed data from working directory
behaviorachievement <- read.table('behaviorachievement.dat', na.strings = 999)
names(behaviorachievement) <- c('id','male','hispanic','riskgrp','atrisk','behsymp1','lrnprob1',
'read1','read2','read3','read9','read9grp','stanread7',
'math1','math2','math3','math9','math9grp','stanmath7')
save(behaviorachievement, file = 'behaviorachievement.rda')
load('behaviorachievement.rda')
View(behaviorachievement)
# MCMC Regression With Binary and Ordinal Predictors
library(fdir)
library(rblimp)
library(mitml)
##################################################
# read data
##################################################
# set working directory
set()
# read imputed data from working directory
mathachievement <- read.table('mathachievement.dat', na.strings = 999)
names(mathachievement) <- c('id', 'condition', 'male', 'frlunch', 'atrisk', 'stanread', 'efficacy', 'anxiety', 'mathpre', 'mathpost')
save(mathachievement, file = 'mathachievement.rda')
# FCS Imputation for Random Intercept Regression
library(fdir)
library(rblimp)
library(rockchalk)
library(lme4)
library(mitml)
##################################################
# set working directory and load data
##################################################
set()
# read imputed data from working directory
problemsolving2level <- read.table('problemsolving2level.dat', na.strings = '999')
names(problemsolving2level) <- c('school','student','condition','teachexp','eslpct','hispanic','male','frlunch',
'lowach','stanmath','efficacypre','efficacypst','psolvepre','psolvepst')
save(problemsolving2level, file = 'problemsolving2level.rda')
# FCS Imputation for Random Intercept Regression
library(fdir)
library(rblimp)
library(rockchalk)
library(lme4)
library(mitml)
##################################################
# set working directory and load data
##################################################
set()
load('problemsolving2level.rda')
# MCMC Two-Level Moderated Regression With Random Slopes
library(fdir)
library(rblimp)
library(rockchalk)
library(lme4)
library(mitml)
##################################################
# set working directory and load data
##################################################
set()
# read imputed data from working directory
problemsolving3level <- read.table('problemsolving3level.dat', na.strings = '999')
names(problemsolving3level) <- c('school','student','wave','condition','teachexp','eslpct','hispanic',
'male','frlunch','lowach','stanmath','month', 'month7', 'probsolve', 'efficacy')
save(problemsolving3level,'problemsolving3level.rda')
set()
# read imputed data from working directory
problemsolving3level <- read.table('problemsolving3level.dat', na.strings = '999')
names(problemsolving3level) <- c('school','student','wave','condition','teachexp','eslpct','hispanic',
'male','frlunch','lowach','stanmath','month', 'month7', 'probsolve', 'efficacy')
save(problemsolving3level,'problemsolving3level.rda')
save(problemsolving3level,file = 'problemsolving3level.rda')
# MCMC Two-Level Moderated Regression With Random Slopes
library(fdir)
library(rblimp)
library(rockchalk)
library(lme4)
library(mitml)
##################################################
# set working directory and load data
##################################################
set()
load('problemsolving3level.rda')
##################################################
# fcs imputation with random intercepts
##################################################
library(fdir)
library(rblimp)
library(rockchalk)
library(lme4)
library(mitml)
##################################################
# set working directory and load data
##################################################
set()
load('problemsolving2level.rda')
##################################################
# fcs imputation (ex15.imp)
##################################################
mymodel <- rblimp_fcs(
data = problemsolving2level,
clusterid = 'school',
ordinal = 'condition hispanic frlunch',
fixed = 'condition psolvepre',
variables = 'psolvepst psolvepre hispanic frlunch condition',
seed = 90291,
burn = 1000,
iter = 10000,
nimps = 20,
chains = 20)
output(mymodel)
names(mymodel@imputations[[1]])
# mitml list
implist <- as.mitml(mymodel)
names(implist[[1]])
names(implist)
names(implist[[]])
names(implist[[1]])
mymodel <- rblimp_fcs(
data = problemsolving2level,
clusterid = 'school',
ordinal = 'condition hispanic frlunch',
fixed = 'condition',
variables = 'psolvepst psolvepre hispanic frlunch condition',
seed = 90291,
burn = 1000,
iter = 10000,
nimps = 20,
chains = 20)
output(mymodel)
# mitml list
implist <- as.mitml(mymodel)
names(implist[[1]])
